[置顶] 安徽科技学院2014-2015-1学期计算机14级12班《C语言程序设计I》期末考试

分类: akoj 汇总 379人阅读 评论(0) 收藏 编辑 取消置顶 删除

1274 Problem A

十字架

Time Limit:1000MS  Memory Limit:65536K
Total Submit:5 Accepted:4

Description

现在给你一个7*7的正方形,让你来数一数这个正方形中有多少的十字架。一个十字形为一个十字架,多个个十字架可以相连。

例如:1 1 0 1 0 1 0
1 1 1 1 1 1 1
1 0 1 0 0 1 0
1 0 1 0 0 1 0
1 1 1 1 1 1 1
0 0 1 0 1 1 1
0 1 1 1 1 1 1

中有4个十字架。

Input

输入第一行有一个数T表示有T组测试数据。
接下来输入T个7行7列的一个正方形。
每行中的两个元素用空格隔开。

Output

每组输出数据有一个数代表有几个十字架,每组数据占一行。

Sample Input

2
1 1 0 1 0 1 0
1 1 1 1 1 1 1
1 0 1 0 0 1 0
1 0 1 0 0 1 0
1 1 1 1 1 1 1
0 0 1 0 1 1 1
0 1 1 1 1 1 1

0 1 0 1 0 1 1
1 1 1 1 1 1 1
0 1 1 1 0 1 1
1 0 1 1 0 1 1
1 1 0 0 0 0 1
1 1 1 1 1 1 1
0 1 0 0 1 0 1

Sample Output

4
5

Source

[Submit]   [Go Back]   [Status]   [Discuss]

  1. #include<iostream>  
  2. using namespace std;  
  3. int main() {  
  4.     int a[8][8]= {0};  
  5.     int n;  
  6.     cin>>n;  
  7.     while(n--) {  
  8.         for(int i=0; i<7; i++)  
  9.             for(int j=0; j<7; j++)  
  10.                 cin>>a[i][j];  
  11.         int count=0;  
  12.         for(int i=1; i<6; i++)  
  13.             for(int j=1; j<6; j++)  
  14.                 if(a[i][j-1]==1&&a[i][j+1]==1&&a[i+1][j]==1&&a[i-1][j]==1&&a[i][j]==1)count++;  
  15.         cout<<count<<endl;  
  16.     }  
  17.     return 0;  
  18. }  
  1. #include<iostream>  
  2. using namespace std;  
  3. int main() {  
  4.     int a[8][8]= {0};  
  5.     int n;  
  6.     cin>>n;  
  7.     while(n--) {  
  8.         for(int i=0; i<7; i++)  
  9.             for(int j=0; j<7; j++)  
  10.                 cin>>a[i][j];  
  11.         int count=0;  
  12.         for(int i=1; i<6; i++)  
  13.             for(int j=1; j<6; j++)  
  14.                 if(a[i][j-1]==1&&a[i][j+1]==1&&a[i+1][j]==1&&a[i-1][j]==1&&a[i][j]==1)count++;  
  15.         cout<<count<<endl;  
  16.     }  
  17.     return 0;  
  18. }  

1276 Problem B

找数

Time Limit:1000MS  Memory Limit:65536K
Total Submit:180 Accepted:78

Description

很简单,下面有三个数n,m1,m2,就是让设计一个程序找出能被m1或被m2整除的个数。

Input

输入包含多组测试数据,每组数据占一行。
0〈n〈2^31,0〈m1,m2〈=10。

Output

[1,n)中能被满m1或者m2整除的个数
每组数据输出占一行。

Sample Input

12 2 3

Sample Output

7

Source

[Submit]   [Go Back]   [Status]   [Discuss]

  1. #include<iostream>  
  2. using namespace std;  
  3. int main() {  
  4.     int a,b,c;  
  5.     while(cin>>a>>b>>c) {  
  6.         int d=0;  
  7.         for(int i=1; i<a; i++)  
  8.             if(i%b==0||i%c==0)  
  9.                 d++;  
  10.         cout<<d<<endl;  
  11.     }  
  12.     return 0;  
  13. }  
  1. #include<iostream>  
  2. using namespace std;  
  3. int main() {  
  4.     int a,b,c;  
  5.     while(cin>>a>>b>>c) {  
  6.         int d=0;  
  7.         for(int i=1; i<a; i++)  
  8.             if(i%b==0||i%c==0)  
  9.                 d++;  
  10.         cout<<d<<endl;  
  11.     }  
  12.     return 0;  
  13. }  

1277 Problem C

奇异的碰撞

Time Limit:1000MS  Memory Limit:65536K
Total Submit:11 Accepted:4

Description

一天,一个生物学家发现了一种菌落碰撞的规律;他发现两个权重M1和M2的菌落碰撞在一起会变成权重为2*sqrt(M1*M2)新菌落,现在培养皿中有一批菌落;现在菌落中发生碰撞,求碰撞之后剩下最后的一个菌落的(最小)权重;
输入:

Input

第一行输入一个整数N,表示菌落的数量;随后有N个数表示菌落的权重;

Output

最后一个菌落的(最小)权重;结果保留三位小数;

Sample Input

3
72
30
50

Sample Output

120.000

Source

[Submit]   [Go Back]   [Status]   [Discuss]


  1. #include <iostream>  
  2. #include<algorithm>  
  3. #include<cmath>  
  4. #include<cstdio>  
  5. double f(double n, double m) {  
  6.     return 2 * sqrt(n * m);  
  7. }  
  8. using namespace std;  
  9.   
  10. int main() {  
  11.     int n, a[1001];  
  12.     cin >> n;  
  13.     for (int i = 0; i < n; i++)  
  14.         cin >> a[i];  
  15.     sort(a, a + n);  
  16.     double s = f(a[n - 1], a[n - 2]);  
  17.     for (int i = n - 3; i >= 0; i--)  
  18.         s = f(s, a[i]);  
  19.     printf("%.3lf", s);  
  20.     return 0;  
  21. }  
  1. #include <iostream>  
  2. #include<algorithm>  
  3. #include<cmath>  
  4. #include<cstdio>  
  5. double f(double n, double m) {  
  6.     return 2 * sqrt(n * m);  
  7. }  
  8. using namespace std;  
  9.   
  10. int main() {  
  11.     int n, a[1001];  
  12.     cin >> n;  
  13.     for (int i = 0; i < n; i++)  
  14.         cin >> a[i];  
  15.     sort(a, a + n);  
  16.     double s = f(a[n - 1], a[n - 2]);  
  17.     for (int i = n - 3; i >= 0; i--)  
  18.         s = f(s, a[i]);  
  19.     printf("%.3lf", s);  
  20.     return 0;  
  21. }  

1279 Problem D


叠硬币的游戏

Time Limit:2000MS  Memory Limit:65536K
Total Submit:17 Accepted:5

Description

小明把存钱罐里的硬币倒出来准备买东西,但是买东西之前小明想玩一个游戏,就是想把硬币叠成一样的高度,你需要算出最少需要移动的硬币数,假设初始的硬币是一层一层的叠好的;
输入

Input

多组测试数据,以EOF结束,第一行是一个n(1<=n<=50)表示有n堆硬币;
第二行是n个正整数k(1<=k<=100)表示每堆硬币的硬币数量
如果n==0运行结束。

Output

对于每组输入数据有两行输出,第一行是一个Case #x,表示x组测试数据,第二行输出y.表示最小的移动砖块的数量为y,若无解就输出No solution

Sample Input

6
5 2 4 1 7 5
2
1 2
4
2 2 2 2
0

Sample Output

Case #1
5
No solution
Case #2
0

Source

[Submit]   [Go Back]   [Status]   [Discuss]

  1. #include<iostream>  
  2. #include<algorithm>  
  3. using namespace std;  
  4. int main() {  
  5.     int n,cas=0;;  
  6.     while( cin>>n) {  
  7.             if(n==0)break;  
  8.         int a[1001],sum=0;  
  9.         for(int i=0; i<n; i++) {  
  10.             cin>>a[i];  
  11.             sum+=a[i];  
  12.         }  
  13.         if(sum%n!=0) {  
  14.             cout<<"No solution"<<endl;  
  15.             continue;  
  16.         } else {  
  17.             int tt=sum/n,count=0;  
  18.             sort(a,a+n);  
  19.             for(int i=0; i<n,a[i]<tt; i++)  
  20.                 count+=tt-a[i];  
  21.             cas++;  
  22.             cout<<"Case #"<<cas<<endl;  
  23.             cout<<count<<endl;  
  24.         }  
  25.     }  
  26.     return 0;  
  27. }  
  1. #include<iostream>  
  2. #include<algorithm>  
  3. using namespace std;  
  4. int main() {  
  5.     int n,cas=0;;  
  6.     while( cin>>n) {  
  7.             if(n==0)break;  
  8.         int a[1001],sum=0;  
  9.         for(int i=0; i<n; i++) {  
  10.             cin>>a[i];  
  11.             sum+=a[i];  
  12.         }  
  13.         if(sum%n!=0) {  
  14.             cout<<"No solution"<<endl;  
  15.             continue;  
  16.         } else {  
  17.             int tt=sum/n,count=0;  
  18.             sort(a,a+n);  
  19.             for(int i=0; i<n,a[i]<tt; i++)  
  20.                 count+=tt-a[i];  
  21.             cas++;  
  22.             cout<<"Case #"<<cas<<endl;  
  23.             cout<<count<<endl;  
  24.         }  
  25.     }  
  26.     return 0;  
  27. }  

1281 Problem E


奇怪的电话号码

Time Limit:3000MS  Memory Limit:65536K
Total Submit:105 Accepted:58

Description

一天小明最近接到了一个 棘手的任务,他们公司有一个电话簿.但是这是一个奇怪的电话簿,因为它不是用数字记录电话号码,而是用数字键上所对应的字母来记录电话号码(2- abc,3-def,4-ghi,5-jkl,6-mno,7-pqrs,8-tuv,9-wxyz),电话号码只有11位。现在你的任务就是帮小明写一 个程序来把这些字母的电话号码转化成数字的电话号码。

Input

第一行输入一个正整数T(0每组测试数据只有一行,输入一串字符(字符长度为11);

Output

每组输出占一行,输出数字的电话号码

Sample Input

2
phqghumeayl
nlfdxfircvs

Sample Output

74744863295
65339347287

Source

[Submit]   [Go Back]   [Status]   [Discuss]

  1. #include<iostream>  
  2. #include<string>  
  3. using namespace std;  
  4. int main() {  
  5.     int n;  
  6.     cin>>n;  
  7.     while(n--) {  
  8.         string s;  
  9.         cin>>s;  
  10.         for(int i=0; i<11; i++) {  
  11.             if(s[i]=='a'||s[i]=='b'||s[i]=='c')cout<<"2";  
  12.             if(s[i]=='d'||s[i]=='e'||s[i]=='f')cout<<"3";  
  13.             if(s[i]=='g'||s[i]=='h'||s[i]=='i')cout<<"4";  
  14.             if(s[i]=='j'||s[i]=='k'||s[i]=='l')cout<<"5";  
  15.             if(s[i]=='m'||s[i]=='n'||s[i]=='o')cout<<"6";  
  16.             if(s[i]=='p'||s[i]=='q'||s[i]=='r'||s[i]=='s')cout<<"7";  
  17.             if(s[i]=='t'||s[i]=='u'||s[i]=='v')cout<<"8";  
  18.             if(s[i]=='w'||s[i]=='x'||s[i]=='y'||s[i]=='z')cout<<"9";  
  19.         }  
  20.         cout<<endl;  
  21.     }  
  22.     return 0;  
  23. }  
  1. #include<iostream>  
  2. #include<string>  
  3. using namespace std;  
  4. int main() {  
  5.     int n;  
  6.     cin>>n;  
  7.     while(n--) {  
  8.         string s;  
  9.         cin>>s;  
  10.         for(int i=0; i<11; i++) {  
  11.             if(s[i]=='a'||s[i]=='b'||s[i]=='c')cout<<"2";  
  12.             if(s[i]=='d'||s[i]=='e'||s[i]=='f')cout<<"3";  
  13.             if(s[i]=='g'||s[i]=='h'||s[i]=='i')cout<<"4";  
  14.             if(s[i]=='j'||s[i]=='k'||s[i]=='l')cout<<"5";  
  15.             if(s[i]=='m'||s[i]=='n'||s[i]=='o')cout<<"6";  
  16.             if(s[i]=='p'||s[i]=='q'||s[i]=='r'||s[i]=='s')cout<<"7";  
  17.             if(s[i]=='t'||s[i]=='u'||s[i]=='v')cout<<"8";  
  18.             if(s[i]=='w'||s[i]=='x'||s[i]=='y'||s[i]=='z')cout<<"9";  
  19.         }  
  20.         cout<<endl;  
  21.     }  
  22.     return 0;  
  23. }  

1283 Problem F


数据的处理

Time Limit:4000MS  Memory Limit:65536K
Total Submit:13 Accepted:8

Description

小明先用计算机生成了N个1到1000之间的随机整数(0〈N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助小明完成“去重”与“排序”的工作。

Input

输入有3行,第1行为1个正整数T(0第3行有N个用空格隔开的正整数,为所产生的随机数。

Output

输出是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

Sample Input

1
10
20 40 32 67 40 20 89 300 400 15

Sample Output

8
15 20 32 40 67 89 300 400

Source

[Submit]   [Go Back]   [Status]   [Discuss]

  1. #include<iostream>  
  2. #include<algorithm>  
  3. using namespace std;  
  4. int main() {  
  5.     int n;  
  6.     cin>>n;  
  7.     while(n--) {  
  8.         int m,a[1001];  
  9.         cin>>m;  
  10.         for(int i=0; i<m; i++)  
  11.             cin>>a[i];  
  12.         sort(a,a+m);  
  13.         int count=0;  
  14.         for(int i=0; i<m; i++)  
  15.             if(a[i]!=a[i+1])  
  16.                 count++;  
  17.         cout<<count<<endl;  
  18.         for(int i=0; i<m; i++)  
  19.             if(a[i]!=a[i+1])  
  20.                 cout<<a[i]<<" ";  
  21.         cout<<endl;  
  22.     }  
  23.     return 0;  
  24. }  
  1. #include<iostream>  
  2. #include<algorithm>  
  3. using namespace std;  
  4. int main() {  
  5.     int n;  
  6.     cin>>n;  
  7.     while(n--) {  
  8.         int m,a[1001];  
  9.         cin>>m;  
  10.         for(int i=0; i<m; i++)  
  11.             cin>>a[i];  
  12.         sort(a,a+m);  
  13.         int count=0;  
  14.         for(int i=0; i<m; i++)  
  15.             if(a[i]!=a[i+1])  
  16.                 count++;  
  17.         cout<<count<<endl;  
  18.         for(int i=0; i<m; i++)  
  19.             if(a[i]!=a[i+1])  
  20.                 cout<<a[i]<<" ";  
  21.         cout<<endl;  
  22.     }  
  23.     return 0;  
  24. }  

1284 Problem G


最大值和序号

Time Limit:1000MS  Memory Limit:65536K
Total Submit:142 Accepted:56

Description

输入n个整数,求这n个数的最大值和序号!

Input

输入n个整数
有多组数据
T a1 a2....at
...

Output

求这n个数的最大值和序号!
每组数据输出两行第一行为最大值,第二行为最大值所在的序号

Sample Input

3
1 2 3
4
1 2 3 3

Sample Output

3
2
3
2 3

Source

[Submit]   [Go Back]   [Status]   [Discuss]

  1. #include<iostream>  
  2. using namespace std;  
  3. int main() {  
  4.     int n;  
  5.     while(cin>>n) {  
  6.         int max=0,a[1001];  
  7.         for(int i=0; i<n; i++) {  
  8.             cin>>a[i];  
  9.             if(a[i]>max)max=a[i];  
  10.         }  
  11.         cout<<max<<endl;  
  12.         for(int i=0; i<n; i++)  
  13.             if(a[i]==max)  
  14.                 cout<<i<<" ";  
  15.         cout<<endl;  
  16.     }  
  17.     return 0;  
  18. }  
  1. #include<iostream>  
  2. using namespace std;  
  3. int main() {  
  4.     int n;  
  5.     while(cin>>n) {  
  6.         int max=0,a[1001];  
  7.         for(int i=0; i<n; i++) {  
  8.             cin>>a[i];  
  9.             if(a[i]>max)max=a[i];  
  10.         }  
  11.         cout<<max<<endl;  
  12.         for(int i=0; i<n; i++)  
  13.             if(a[i]==max)  
  14.                 cout<<i<<" ";  
  15.         cout<<endl;  
  16.     }  
  17.     return 0;  
  18. }  

1285 Problem H


集合差

Time Limit:1000MS  Memory Limit:65536K
Total Submit:13 Accepted:10

Description

集合A-B被定义为由所有在A中但不在B中的元素组成的集合。例如A={1,2,3,4,5};B={2,4,6}则C=A-B={1,3,5}

Input

输入集合A和集合B

Output

输出集合C

Sample Input

5 1 2 3 4 5
3 2 4 6

Sample Output

3 1 3 5

Hint

数字已经有序,集合的输出格式:集合长度 集合元素1.集合元素2.....

Source

[Submit]   [Go Back]   [Status]   [Discuss]

  1. #include<iostream>  
  2. using namespace std;  
  3. int main() {  
  4.     int a[1001],b[1001],m,n;  
  5.     cin>>m;  
  6.     for(int i=0; i<m; i++)  
  7.         cin>>a[i];  
  8.     cin>>n;  
  9.     for(int i=0; i<n; i++)  
  10.         cin>>b[i];  
  11.     int k=0,j=0,c[1001];  
  12.     for(int i=0; i<m; i++) {  
  13.         if(a[i]!=b[j]) {  
  14.             c[k]=a[i];  
  15.             k++;  
  16.         } else  j++;  
  17.     }  
  18.     cout<<k;  
  19.     for(int i=0; i<k; i++)  
  20.         cout<<" "<<c[i];  
  21.     cout<<endl;  
  22.     return 0;  
  23. }  
  1. #include<iostream>  
  2. using namespace std;  
  3. int main() {  
  4.     int a[1001],b[1001],m,n;  
  5.     cin>>m;  
  6.     for(int i=0; i<m; i++)  
  7.         cin>>a[i];  
  8.     cin>>n;  
  9.     for(int i=0; i<n; i++)  
  10.         cin>>b[i];  
  11.     int k=0,j=0,c[1001];  
  12.     for(int i=0; i<m; i++) {  
  13.         if(a[i]!=b[j]) {  
  14.             c[k]=a[i];  
  15.             k++;  
  16.         } else  j++;  
  17.     }  
  18.     cout<<k;  
  19.     for(int i=0; i<k; i++)  
  20.         cout<<" "<<c[i];  
  21.     cout<<endl;  
  22.     return 0;  
  23. }  

1286 Problem I


大写元音字母

Time Limit:1000MS  Memory Limit:65536K
Total Submit:122 Accepted:73

Description

输入一个字符串(不含空格)你的任务是将其中的元音字母都转换成大写字母并将其输出!

Input

多组数据输入
每行长度不超过100

Output

输出转换后的单词

Sample Input

acm
icpc
Ahstu

Sample Output

Acm
Icpc
AhstU

Source

[Submit]   [Go Back]   [Status]   [Discuss]

  1. #include<iostream>  
  2. #include<string>  
  3. using namespace std;  
  4. int main() {  
  5.     string a;  
  6.     while(cin>>a) {  
  7.         for(int i=0; i<a.size(); i++) {  
  8.             if(a[i]=='a')a[i]='A';  
  9.             if(a[i]=='o')a[i]='O';  
  10.             if(a[i]=='e')a[i]='E';  
  11.             if(a[i]=='i')a[i]='I';  
  12.             if(a[i]=='u')a[i]='U';  
  13.         }  
  14.         cout<<a<<endl;  
  15.     }  
  16.     return 0;  
  17. }  
  1. #include<iostream>  
  2. #include<string>  
  3. using namespace std;  
  4. int main() {  
  5.     string a;  
  6.     while(cin>>a) {  
  7.         for(int i=0; i<a.size(); i++) {  
  8.             if(a[i]=='a')a[i]='A';  
  9.             if(a[i]=='o')a[i]='O';  
  10.             if(a[i]=='e')a[i]='E';  
  11.             if(a[i]=='i')a[i]='I';  
  12.             if(a[i]=='u')a[i]='U';  
  13.         }  
  14.         cout<<a<<endl;  
  15.     }  
  16.     return 0;  
  17. }  

1282 Problem J


数的另一种表示方法

Time Limit:4000MS  Memory Limit:65536K
Total Submit:70 Accepted:45

Description

下面我们定义 f(A) = 1, f(a) = -1, f(B) = 2, f(b) = -2, ... f(Z) = 26, f(z) = -26;
给你一个x和一个数y;你需要求出y+f(x)的结果;

Input

第一行输入一个数t(0

Output

y+f(x)的结果;

Sample Input

6
R 1
P 2
G 3
r 1
p 2
g 3

Sample Output

19
18
10
-17
-14
-4

Source

[Submit]   [Go Back]   [Status]   [Discuss]

  1. #include<iostream>  
  2. using namespace std;  
  3. int main() {  
  4.     int n;  
  5.     cin>>n;  
  6.     while(n--) {  
  7.         char s;  
  8.         int m;  
  9.         cin>>s>>m;  
  10.         if(s>='A'&&s<='Z')cout<<s-64+m<<endl;  
  11.         if(s>='a'&&s<='z')cout<<-(s-96-m)<<endl;  
  12.     }  
  13.     return 0;  
  14. }  
  1. #include<iostream>  
  2. using namespace std;  
  3. int main() {  
  4.     int n;  
  5.     cin>>n;  
  6.     while(n--) {  
  7.         char s;  
  8.         int m;  
  9.         cin>>s>>m;  
  10.         if(s>='A'&&s<='Z')cout<<s-64+m<<endl;  
  11.         if(s>='a'&&s<='z')cout<<-(s-96-m)<<endl;  
  12.     }  
  13.     return 0;  
  14. }  


    个人资料
    • 访问:5552次
    • 积分:1507
    • 等级:
    • 排名:第12502名
    • 原创:131篇
    • 转载:0篇
    • 译文:20篇
    • 评论:2条
    博客专栏
    文章分类

提问

您的问题将会被发布在“技术问答”频道×
该问题已存在,请勿重复提问
||||||
  
000:0
||||||
  
 
 
000:0
推荐标签:
我要悬赏
取消发布
可能存在类似的问题:
我想提一个新问题

提问

您的问题将会被发布在“技术问答”频道×
该问题已存在,请勿重复提问
推荐标签:
我要悬赏
取消发布
可能存在类似的问题:
我想提一个新问题